package com.demo.controller;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.demo.common.Result;
import com.demo.entity.Sperson;
import com.demo.mapper.SpersonMapper;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 科研人员信息表
 */
@RestController
@RequestMapping("/sperson")
public class SpersonController {
  /**
   * 服务对象
   */
  @Resource
  SpersonMapper spersonMapper;
  
  // 新增
  @PostMapping
  public Result<?> insert(@RequestBody Sperson sperson) {
    try {
      spersonMapper.insert(sperson);
      return Result.success();
    } catch (Exception e) {
      System.out.println(e);
      return Result.error("202", "");
    }
    
  }
  
  //  删除 ById
  @DeleteMapping("/{id}")
  public Result<?> delete(@PathVariable Integer id) {
    spersonMapper.deleteById(id);
    return Result.success();
  }
  
  
  // 修改
  @PutMapping
  public Result<?> updata(@RequestBody Sperson sperson) {
    try {
      spersonMapper.updateById(sperson);
      return Result.success();
    } catch (Exception e) {
      return Result.error("201","");
    }
   
  }
  
  /**
   * 分页,默认1页,10个数据,  默认根据 pno 职工号  查询
   *
   * @param pageNum  页数
   * @param pageSize 页面显示数
   * @param search   搜索关键词
   * @param sort     搜索类别
   * @return
   */
  @GetMapping
  public Result<?> findPageByaName(@RequestParam(defaultValue = "1") Integer pageNum,
                                   @RequestParam(defaultValue = "10") Integer pageSize,
                                   @RequestParam(defaultValue = "") String search,
                                   @RequestParam(defaultValue = "Pno") String sort) {
    LambdaQueryWrapper<Sperson> wrapper = Wrappers.<Sperson>lambdaQuery();
    //根据Id逆序排列
    wrapper.orderByDesc(Sperson::getId);
    if (StrUtil.isNotBlank(search)) {
      switch (sort) {
        case "Pno": //职工号
          wrapper.like(Sperson::getPno, search);
          break;
        case "Pname"://姓名
          wrapper.like(Sperson::getPname, search);
          break;
        case "Competent"://职称
          wrapper.like(Sperson::getCompetent, search);
          break;
        case "Department" : //所在部门
          wrapper.like(Sperson::getDepartment, search);
          break;
      }
    }
    
    Page<Sperson> AdminPage = spersonMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
    return Result.success(AdminPage);
  }
  
  // 根据pno 查询是否有这个主键
  @GetMapping("/pno/{pno}")
  public Result<?> getPno(@PathVariable String pno) {
    Sperson i= spersonMapper.selectOne(Wrappers.<Sperson>lambdaQuery().eq(Sperson::getPno, pno));
    if (i == null) {
      //表示不含有,则可以输入
      return Result.success();
    }
    //表示表中已存在,则不可以输入
    return Result.errorData("201", i);
  }
  
  // 根据pname 查询是否有这个主键    用于item的表中的负责人,外键绑定 pname
  @GetMapping("/pname/{pname}")
  public Result<?> getPname(@PathVariable String pname) {
    //不用selectOne 的原因是: pname可能有相同的,使用SelectOne会报错提示找到多个
    int i = spersonMapper.selectCount(Wrappers.<Sperson>lambdaQuery().eq(Sperson::getPname, pname));
    if (i == 0) {
      //表示不含有
      return Result.success();
    }
    //表示表中已存在
    return Result.error("201", "主键重复");
  }
  
}

